package ar.com.uade.administradorsiembra.common;

import java.sql.Connection;
import java.sql.SQLException;
import ar.com.uade.administradorsiembra.persistencia.PoolConnection;

public class Transaccion {
	private final PoolConnection pool;
	private Connection conexionActiva;

	public Transaccion() {
		this.pool = PoolConnection.getPoolConnection();
	}
	
	public Connection getConexionActiva() {
		return this.conexionActiva;
	}
	
	void liberarConexionActiva() {
		if(this.conexionActiva != null) {
			this.pool.realeaseConnection(this.conexionActiva);
	        this.conexionActiva = null;
		}
	}
	
	void iniciar() throws SQLException {
		this.conexionActiva = this.pool.getConnection();
		
		try {
			this.conexionActiva.setAutoCommit(false);
		} catch (SQLException e) {
			this.liberarConexionActiva();
			throw e;
		}
	}
	
	void commitear() throws SQLException {
		try {
			this.conexionActiva.commit();
		} catch (SQLException e) {
			this.liberarConexionActiva();
			throw e;
	    }
		
		this.liberarConexionActiva();
	}

	void rollback() throws SQLException {
		try {
			this.conexionActiva.rollback();
	    } catch (SQLException e) {
	    	this.liberarConexionActiva();
	    	throw e;
	    }
	
	    this.liberarConexionActiva();
	}
}
